var am = {
    "C": "AM",
    "aa": "saaku",
    "ab": "AM",
    "ae": "AM",
    "af": "vm.",
    "ak": "AN",
    "am": "\u1325\u12cb\u1275",
    "an": "AM",
    "ar": "\u0635",
    "as": "\u09f0\u09be\u09a4\u09bf\u09aa\u09c1",
    "av": "AM",
    "ay": "AM",
    "az": "AM",
    "ba": "",
    "be": "",
    "bg": "",
    "bh": "AM",
    "bi": "AM",
    "bm": "AM",
    "bn": "AM",
    "bo": "\u0f66\u0f94\u0f0b\u0f51\u0fb2\u0f7c",
    "br": "A.M.",
    "bs": "prijepodne",
    "ca": "a. m.",
    "ce": "AM",
    "ch": "AM",
    "co": "",
    "cr": "AM",
    "cs": "dop.",
    "cu": "\u0414\u041f",
    "cv": "AM",
    "cy": "yb",
    "da": "",
    "de": "",
    "dv": "\u0789\u0786",
    "dz": "\u0f66\u0f94\u0f0b\u0f46\u0f0b",
    "ee": "\u014bdi",
    "el": "\u03c0\u03bc",
    "en": "AM",
    "eo": "atm",
    "es": "",
    "et": "AM",
    "eu": "AM",
    "fa": "\u0642.\u0638",
    "ff": "",
    "fi": "ap.",
    "fj": "AM",
    "fo": "um fyr.",
    "fr": "",
    "fy": "AM",
    "ga": "r.n.",
    "gd": "m",
    "gl": "a.m.",
    "gn": "a.m.",
    "gu": "\u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u00a0\u0aae\u0aa7\u0acd\u0aaf\u0abe\u0ab9\u0acd\u0aa8",
    "gv": "a.m.",
    "ha": "AM",
    "he": "AM",
    "hi": "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928",
    "ho": "AM",
    "hr": "",
    "ht": "AM",
    "hu": "de.",
    "hy": "",
    "hz": "AM",
    "ia": "a.m.",
    "id": "AM",
    "ie": "AM",
    "ig": "A.M.",
    "ii": "\ua0b5\ua1aa\ua20c\ua210",
    "ik": "AM",
    "io": "AM",
    "is": "f.h.",
    "it": "",
    "iu": "AM",
    "ja": "\u5348\u524d",
    "jv": "",
    "ka": "AM",
    "kg": "AM",
    "ki": "Kiroko",
    "kj": "AM",
    "kk": "AM",
    "kl": "",
    "km": "\u1796\u17d2\u179a\u17b9\u1780",
    "kn": "\u0caa\u0cc2\u0cb0\u0ccd\u0cb5\u0cbe\u0cb9\u0ccd\u0ca8",
    "ko": "\uc624\uc804",
    "kr": "AM",
    "ks": "AM",
    "ku": "\u067e.\u0646",
    "kv": "AM",
    "kw": "a.m.",
    "ky": "",
    "la": "",
    "lb": "",
    "lg": "AM",
    "li": "AM",
    "ln": "nt\u0254\u0301ng\u0254\u0301",
    "lo": "\u0e81\u0ec8\u0ead\u0e99\u0e97\u0ec8\u0ebd\u0e87",
    "lt": "prie\u0161piet",
    "lu": "Dinda",
    "lv": "priek\u0161p.",
    "mg": "AM",
    "mh": "AM",
    "mi": "a.m.",
    "mk": "\u043f\u0440\u0435\u0442\u043f\u043b.",
    "ml": "AM",
    "mn": "??",
    "mo": "AM",
    "mr": "\u092e.\u092a\u0942.",
    "ms": "PG",
    "mt": "AM",
    "my": "\u1014\u1036\u1014\u1000\u103a",
    "na": "AM",
    "nb": "a.m.",
    "nd": "AM",
    "ne": "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928",
    "ng": "AM",
    "nl": "",
    "nn": "f.m.",
    "no": "a.m.",
    "nr": "AM",
    "nv": "AM",
    "ny": "AM",
    "oc": "AM",
    "oj": "AM",
    "om": "WD",
    "or": "AM",
    "os": "AM",
    "pa": "\u0a38\u0a35\u0a47\u0a30",
    "pi": "AM",
    "pl": "AM",
    "ps": "\u063a.\u0645.",
    "pt": "",
    "qu": "a.m.",
    "rc": "AM",
    "rm": "AM",
    "rn": "Z.MU.",
    "ro": "a.m.",
    "ru": "",
    "rw": "AM",
    "sa": "\u092e\u0927\u094d\u092f\u093e\u0928\u092a\u0942\u0930\u094d\u0935",
    "sc": "AM",
    "sd": "AM",
    "se": "i.b.",
    "sg": "ND",
    "sh": "AM",
    "si": "\u0db4\u0dd9.\u0dc0.",
    "sk": "AM",
    "sl": "dop.",
    "sm": "AM",
    "sn": "AM",
    "so": "sn.",
    "sq": "e paradites",
    "sr": "pre podne",
    "ss": "AM",
    "st": "AM",
    "su": "AM",
    "sv": "",
    "sw": "AM",
    "ta": "\u0b95\u0bbe\u0bb2\u0bc8",
    "te": "\u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c3e\u0c39\u0c4d\u0c28",
    "tg": "",
    "th": "AM",
    "ti": "\u1295\u1309\u1206 \u1230\u12d3\u1270",
    "tk": "",
    "tl": "AM",
    "tn": "AM",
    "to": "AM",
    "tr": "\u00d6\u00d6",
    "ts": "AM",
    "tt": "",
    "tw": "AM",
    "ty": "AM",
    "ug": "\u0686?\u0634\u062a\u0649\u0646 \u0628?\u0631?\u0646",
    "uk": "AM",
    "ur": "AM",
    "uz": "TO",
    "ve": "AM",
    "vi": "SA",
    "vo": "AM",
    "wa": "AM",
    "wo": "",
    "xh": "AM",
    "yi": "\ua0b5\ua1aa\ua20c\ua210",
    "yo": "\u00c0\u00e1r?`",
    "za": "AM",
    "zh": "\u4e0a\u5348",
    "zu": "AM"
}
var pm = {
    "C": "PM",
    "aa": "carra",
    "ab": "PM",
    "ae": "PM",
    "af": "nm.",
    "ak": "EW",
    "am": "\u12a8\u1230\u12d3\u1275",
    "an": "PM",
    "ar": "\u0645",
    "as": "\u0986\u09ac\u09c7\u09b2\u09bf",
    "av": "PM",
    "ay": "PM",
    "az": "PM",
    "ba": "",
    "be": "",
    "bg": "",
    "bh": "PM",
    "bi": "PM",
    "bm": "PM",
    "bn": "PM",
    "bo": "\u0f55\u0fb1\u0f72\u0f0b\u0f51\u0fb2\u0f7c",
    "br": "G.M.",
    "bs": "popodne",
    "ca": "p. m.",
    "ce": "PM",
    "ch": "PM",
    "co": "",
    "cr": "PM",
    "cs": "odp.",
    "cu": "\u041f\u041f",
    "cv": "PM",
    "cy": "yh",
    "da": "",
    "de": "",
    "dv": "\u0789\u078a",
    "dz": "\u0f55\u0fb1\u0f72\u0f0b\u0f46\u0f0b",
    "ee": "\u0263etr\u0254",
    "el": "\u03bc\u03bc",
    "en": "PM",
    "eo": "ptm",
    "es": "",
    "et": "PM",
    "eu": "PM",
    "fa": "\u0628.\u0638",
    "ff": "",
    "fi": "ip.",
    "fj": "PM",
    "fo": "um sein.",
    "fr": "",
    "fy": "PM",
    "ga": "i.n.",
    "gd": "f",
    "gl": "p.m.",
    "gn": "p.m.",
    "gu": "\u0a89\u0aa4\u0acd\u0aa4\u0ab0\u00a0\u0aae\u0aa7\u0acd\u0aaf\u0abe\u0ab9\u0acd\u0aa8",
    "gv": "p.m.",
    "ha": "PM",
    "he": "PM",
    "hi": "\u0905\u092a\u0930\u093e\u0939\u094d\u0928",
    "ho": "PM",
    "hr": "",
    "ht": "PM",
    "hu": "du.",
    "hy": "",
    "hz": "PM",
    "ia": "p.m.",
    "id": "PM",
    "ie": "PM",
    "ig": "P.M.",
    "ii": "\ua0b5\ua1aa\ua20c\ua248",
    "ik": "PM",
    "io": "PM",
    "is": "e.h.",
    "it": "",
    "iu": "PM",
    "ja": "\u5348\u5f8c",
    "jv": "",
    "ka": "PM",
    "kg": "PM",
    "ki": "Hwa\u0129-in\u0129",
    "kj": "PM",
    "kk": "PM",
    "kl": "",
    "km": "\u179b\u17d2\u1784\u17b6\u1785",
    "kn": "\u0c85\u0caa\u0cb0\u0cbe\u0cb9\u0ccd\u0ca8",
    "ko": "\uc624\ud6c4",
    "kr": "PM",
    "ks": "PM",
    "ku": "\u062f.\u0646",
    "kv": "PM",
    "kw": "p.m.",
    "ky": "",
    "la": "",
    "lb": "",
    "lg": "PM",
    "li": "PM",
    "ln": "mp\u00f3kwa",
    "lo": "\u0eab\u0ebc\u0eb1\u0e87\u0e97\u0ec8\u0ebd\u0e87",
    "lt": "popiet",
    "lu": "Dilolo",
    "lv": "p\u0113cp.",
    "mg": "PM",
    "mh": "PM",
    "mi": "p.m.",
    "mk": "\u043f\u043e\u043f\u043b.",
    "ml": "PM",
    "mn": "?\u0425",
    "mo": "PM",
    "mr": "\u092e.\u0928\u0902.",
    "ms": "PTG",
    "mt": "PM",
    "my": "\u100a\u1014\u1031",
    "na": "PM",
    "nb": "p.m.",
    "nd": "PM",
    "ne": "\u0905\u092a\u0930\u093e\u0939\u094d\u0928",
    "ng": "PM",
    "nl": "",
    "nn": "e.m.",
    "no": "p.m.",
    "nr": "PM",
    "nv": "PM",
    "ny": "PM",
    "oc": "PM",
    "oj": "PM",
    "om": "WB",
    "or": "PM",
    "os": "PM",
    "pa": "\u0a36\u0a3e\u0a2e",
    "pi": "PM",
    "pl": "PM",
    "ps": "\u063a.\u0648.",
    "pt": "",
    "qu": "p.m.",
    "rc": "PM",
    "rm": "PM",
    "rn": "Z.MW.",
    "ro": "p.m.",
    "ru": "",
    "rw": "PM",
    "sa": "\u092e\u0927\u094d\u092f\u093e\u0928\u092a\u091a\u094d\u092f\u093e\u0924",
    "sc": "PM",
    "sd": "PM",
    "se": "e.b.",
    "sg": "LK",
    "sh": "PM",
    "si": "\u0db4.\u0dc0.",
    "sk": "PM",
    "sl": "pop.",
    "sm": "PM",
    "sn": "PM",
    "so": "gn.",
    "sq": "e pasdites",
    "sr": "po podne",
    "ss": "PM",
    "st": "PM",
    "su": "PM",
    "sv": "",
    "sw": "PM",
    "ta": "\u0bae\u0bbe\u0bb2\u0bc8",
    "te": "\u0c05\u0c2a\u0c30\u0c3e\u0c39\u0c4d\u0c28",
    "tg": "",
    "th": "PM",
    "ti": "\u12f5\u1215\u122d \u1230\u12d3\u1275",
    "tk": "",
    "tl": "PM",
    "tn": "PM",
    "to": "PM",
    "tr": "\u00d6S",
    "ts": "PM",
    "tt": "",
    "tw": "PM",
    "ty": "PM",
    "ug": "\u0686?\u0634\u062a\u0649\u0646 \u0643?\u064a\u0649\u0646",
    "uk": "PM",
    "ur": "PM",
    "uz": "TK",
    "ve": "PM",
    "vi": "CH",
    "vo": "PM",
    "wa": "PM",
    "wo": "",
    "xh": "PM",
    "yi": "\ua0b5\ua1aa\ua20c\ua248",
    "yo": "?`s\u00e1n",
    "za": "PM",
    "zh": "\u4e0b\u5348",
    "zu": "PM"
}

var X_format = {
    "%H:%M:%S": [
        "C",
        "ab",
        "ae",
        "af",
        "an",
        "av",
        "ay",
        "az",
        "ba",
        "be",
        "bg",
        "bh",
        "bi",
        "bm",
        "bo",
        "br",
        "bs",
        "ca",
        "ce",
        "ch",
        "co",
        "cr",
        "cs",
        "cu",
        "cv",
        "cy",
        "da",
        "de",
        "dv",
        "eo",
        "es",
        "et",
        "eu",
        "ff",
        "fj",
        "fo",
        "fr",
        "fy",
        "ga",
        "gd",
        "gl",
        "gn",
        "gu",
        "gv",
        "ha",
        "he",
        "hi",
        "ho",
        "hr",
        "ht",
        "hu",
        "hy",
        "hz",
        "ia",
        "ie",
        "ig",
        "ik",
        "io",
        "is",
        "it",
        "ja",
        "ka",
        "kg",
        "ki",
        "kj",
        "kk",
        "kl",
        "km",
        "kn",
        "kv",
        "kw",
        "ky",
        "la",
        "lb",
        "lg",
        "li",
        "ln",
        "lo",
        "lt",
        "lu",
        "lv",
        "mg",
        "mh",
        "mk",
        "mn",
        "mo",
        "mr",
        "mt",
        "my",
        "na",
        "nb",
        "nd",
        "ng",
        "nl",
        "nn",
        "no",
        "nr",
        "nv",
        "ny",
        "oj",
        "or",
        "os",
        "pi",
        "pl",
        "ps",
        "pt",
        "rc",
        "rm",
        "rn",
        "ro",
        "ru",
        "rw",
        "sa",
        "sc",
        "se",
        "sg",
        "sh",
        "sk",
        "sl",
        "sm",
        "sn",
        "sr",
        "ss",
        "st",
        "su",
        "sv",
        "sw",
        "ta",
        "te",
        "tg",
        "th",
        "tk",
        "tl",
        "tn",
        "tr",
        "ts",
        "tt",
        "tw",
        "ty",
        "ug",
        "uk",
        "uz",
        "ve",
        "vo",
        "wa",
        "wo",
        "xh",
        "yo",
        "za",
        "zh",
        "zu"
    ],
    "%i:%M:%S %p": [
        "aa",
        "ak",
        "am",
        "bn",
        "el",
        "en",
        "iu",
        "kr",
        "ks",
        "mi",
        "ml",
        "ms",
        "ne",
        "om",
        "sd",
        "so",
        "sq",
        "ti",
        "to",
        "ur",
        "vi"
    ],
    "%I:%M:%S %p": [
        "ar",
        "fa",
        "ku",
        "qu"
    ],
    "%p %i:%M:%S": [
        "as",
        "ii",
        "ko",
        "yi"
    ],
    "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b%i:%M:%S %p": [
        "dz"
    ],
    "%p ga %i:%M:%S": [
        "ee"
    ],
    "%H.%M.%S": [
        "fi",
        "id",
        "jv",
        "oc",
        "si"
    ],
    "%p %I:%M:%S": [
        "pa"
    ]
}
var x_format = {
    "%m/%d/%y": [
        "C"
    ],
    "%d/%m/%Y": [
        "aa",
        "am",
        "bm",
        "bn",
        "ca",
        "co",
        "cy",
        "el",
        "es",
        "ff",
        "fr",
        "ga",
        "gd",
        "gl",
        "gn",
        "gv",
        "ha",
        "he",
        "id",
        "ig",
        "it",
        "iu",
        "jv",
        "ki",
        "kr",
        "kw",
        "la",
        "lg",
        "ln",
        "lo",
        "lu",
        "mi",
        "ml",
        "ms",
        "mt",
        "nd",
        "oc",
        "om",
        "pt",
        "qu",
        "rn",
        "sd",
        "sg",
        "so",
        "sw",
        "ti",
        "to",
        "uk",
        "ur",
        "uz",
        "vi",
        "wo",
        "yo"
    ],
    "%m/%d/%Y": [
        "ab",
        "ae",
        "an",
        "av",
        "ay",
        "bh",
        "bi",
        "ch",
        "cr",
        "cv",
        "ee",
        "en",
        "fj",
        "ho",
        "ht",
        "hz",
        "ie",
        "ik",
        "io",
        "kg",
        "kj",
        "ks",
        "kv",
        "li",
        "mh",
        "mo",
        "na",
        "ne",
        "ng",
        "nv",
        "ny",
        "oj",
        "pi",
        "rc",
        "sc",
        "sh",
        "sm",
        "su",
        "tl",
        "tw",
        "ty",
        "wa",
        "za",
        "zu"
    ],
    "%Y-%m-%d": [
        "af",
        "br",
        "ce",
        "dz",
        "eo",
        "ko",
        "lt",
        "mg",
        "nr",
        "rw",
        "se",
        "si",
        "sn",
        "ss",
        "st",
        "sv",
        "tn",
        "ts",
        "ug",
        "ve",
        "vo",
        "xh"
    ],
    "%Y/%m/%d": [
        "ak",
        "bo",
        "eu",
        "ia",
        "ii",
        "ja",
        "ku",
        "yi",
        "zh"
    ],
    "null": [
        "ar",
        "fa",
        "ps",
        "th"
    ],
    "%d-%m-%Y": [
        "as",
        "da",
        "fy",
        "hi",
        "kl",
        "mr",
        "my",
        "nl",
        "rm",
        "sa",
        "ta"
    ],
    "%d.%m.%Y": [
        "az",
        "cs",
        "de",
        "et",
        "fi",
        "fo",
        "hy",
        "is",
        "ka",
        "kk",
        "lv",
        "mk",
        "nb",
        "nn",
        "no",
        "os",
        "pl",
        "ro",
        "ru",
        "sq",
        "tg",
        "tr",
        "tt"
    ],
    "%d.%m.%y": [
        "ba",
        "be",
        "lb"
    ],
    "%d.%m.%Y \u0433.": [
        "bg"
    ],
    "%d.%m.%Y.": [
        "bs",
        "hr",
        "sr"
    ],
    "%Y.%m.%d": [
        "cu",
        "mn"
    ],
    "%d/%m/%y": [
        "dv",
        "km"
    ],
    "%d-%m-%y": [
        "gu",
        "kn",
        "or",
        "pa",
        "te"
    ],
    "%Y. %m. %d.": [
        "hu"
    ],
    "%d-%b %y": [
        "ky"
    ],
    "%d. %m. %Y": [
        "sk",
        "sl"
    ],
    "%d.%m.%y \u00fd.": [
        "tk"
    ]
}


var $module=(function($B){
    var _b_ = $B.builtins
    return {
        CHAR_MAX: 127,
        LC_ALL: 6,
        LC_COLLATE: 3,
        LC_CTYPE: 0,
        LC_MESSAGES: 5,
        LC_MONETARY: 4,
        LC_NUMERIC: 1,
        LC_TIME: 2,
        Error: _b_.ValueError,

        _date_format: function(spec, hour){
            var t,
                locale = __BRYTHON__.locale.substr(0, 2)

            if(spec == "p"){
                var res = hours < 12 ? am[locale] : pm[locale]
                if(res === undefined){
                    throw _b_.ValueError.$factory("no format " + spec + " for locale " +
                        locale)
                }
                return res
            }
            else if(spec == "x"){
                t = x_format
            }else if(spec == "X"){
                t = X_format
            }else{
                throw _b_.ValueError.$factory("invalid format", spec)
            }
            for(var key in t){
                if(t[key].indexOf(locale) > -1){
                    return key
                }
            }
            throw _b_.ValueError.$factory("no format " + spec + " for locale " +
                locale)
        },

        localeconv: function(){
            var conv = {'grouping': [127],
                    'currency_symbol': '',
                    'n_sign_posn': 127,
                    'p_cs_precedes': 127,
                    'n_cs_precedes': 127,
                    'mon_grouping': [],
                    'n_sep_by_space': 127,
                    'decimal_point': '.',
                    'negative_sign': '',
                    'positive_sign': '',
                    'p_sep_by_space': 127,
                    'int_curr_symbol': '',
                    'p_sign_posn': 127,
                    'thousands_sep': '',
                    'mon_thousands_sep': '',
                    'frac_digits': 127,
                    'mon_decimal_point': '',
                    'int_frac_digits': 127
             }
             var res = _b_.dict.$factory()
             for(var key in conv){
                 res.$string_dict[key] = [conv, res.$version]
                 res.$version++
             }
             return res
         },

        setlocale : function(){
            var $ = $B.args("setlocale", 2, {category: null, locale: null},
                ["category", "locale"], arguments, {locale: _b_.None},
                null, null)
            /// XXX category is currently ignored
            if($.locale == ""){
                // use browser language setting, if it is set
                var LANG = ($B.language || "").substr(0, 2)
                if(am.hasOwnProperty(LANG)){
                    $B.locale = LANG
                    return LANG
                }else{
                    console.log("Unknown locale: " + LANG)
                }
            }else if($.locale === _b_.None){
                // return current locale
                return $B.locale
            }else{
                // Only use 2 first characters
                try{$.locale.substr(0, 2)}
                catch(err){
                    throw $module.Error.$factory("Invalid locale: " + $.locale)
                }
                if(am.hasOwnProperty($.locale.substr(0, 2))){
                    $B.locale = $.locale
                    return $.locale
                }else{
                    throw $module.Error.$factory("Unknown locale: " + $.locale)
                }
            }
        }
    }
})(__BRYTHON__)
